package ar.uba.is2.ec.matem.datos;

import java.util.Date;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

import ar.uba.is2.common.loc.Coordenada;
import ar.uba.is2.common.mensaje.contenido.Dato;
import ar.uba.is2.common.mensaje.contenido.Identificador;
import ar.uba.is2.common.mensaje.contenido.TipoDato;

public class ResultadoDeModelo implements Dato {

	private static Object obj = new Object();
	private static long ID = 0;

	public static final synchronized Long proxId() {
		return obj.hashCode() + ID;
	}

	private Long id;
	private transient Identificador identificador = new Identificador();
	private Coordenada coordenada;
	private String idModelo;
	private long timestamp;
	private EstadoMeteorologico estadoMeteorologico;

	public ResultadoDeModelo() {
		this.identificador.setTipoDato(TipoDato.RESULTADO);
	}
	
	public String getEstadoMet(){
		return this.estadoMeteorologico.name();
	}

	public void setEstadoMet(String estado){
		this.estadoMeteorologico = EstadoMeteorologico.valueOf(estado);
	}

	
	public Coordenada getCoordenada() {
		return this.coordenada;
	}

	public EstadoMeteorologico getEstadoMeteorologico() {
		return this.estadoMeteorologico;
	}

	public Date getFecha() {
		return new Date(this.timestamp);
	}

	public Long getId() {
		return id;
	}

	@Override
	public Identificador getIdentificador() {
		return this.identificador;
	}

	public String getIdModelo() {
		return idModelo;
	}

	@Override
	public TipoDato getTipoDato() {
		return TipoDato.RESULTADO;
	}

	public EstadoMeteorologico getValor() {
		return estadoMeteorologico;
	}

	public void setCoordenada(Coordenada coordenada) {
		this.coordenada = coordenada;
		this.identificador.setCoordenada(coordenada);
	}

	public void setEstadoMeteorologico(EstadoMeteorologico estadoMeteorologico) {
		this.estadoMeteorologico = estadoMeteorologico;
	}

	public void setFecha(Date fecha) {
		this.timestamp = fecha.getTime();
	}

	public void setId(Long id) {
		this.id = id;
	}

	public void setIdModelo(String idModelo) {
		this.idModelo = idModelo;
		this.identificador.setValorIdentificatorio(this.idModelo);
	}

	public void setValor(EstadoMeteorologico estadoMeteorologico) {
		this.estadoMeteorologico = estadoMeteorologico;
	}

	@Override
	public String toString() {
		return ToStringBuilder.reflectionToString(this,
				ToStringStyle.SIMPLE_STYLE);
	}

	long getTimestamp() {
		return timestamp;
	}

	void setTimestamp(long timestamp) {
		this.timestamp = timestamp;
	}
}
